package com.xy.springboot.game.common.config;

import com.iohao.game.action.skeleton.core.BarSkeletonBuilder;
import com.iohao.game.action.skeleton.core.BarSkeletonBuilderParamConfig;
import com.iohao.game.action.skeleton.core.IoGameGlobalSetting;
import com.iohao.game.action.skeleton.core.codec.JsonDataCodec;
import com.iohao.game.action.skeleton.core.flow.internal.DebugInOut;
import com.iohao.game.action.skeleton.core.flow.internal.TraceIdInOut;
import com.xy.springboot.game.common.data.CommonProtoDataCodec;
import com.xy.springboot.game.common.doc.SendDoc;
import com.xy.springboot.game.common.enums.SpringGameCodeEnum;
import lombok.experimental.UtilityClass;
import com.xy.springboot.game.common.flow.UserLoginFlowContext;
@UtilityClass
public class BarSkeletonConfig {
    /**
     * 在实践项目中，可以提供这样一个通用的业务框架配置
     * @return BarSkeletonBuilderParamConfig
     */
    public BarSkeletonBuilderParamConfig createBarSkeletonBuilderParamConfig() {
        // 业务框架构建器 配置
        return new BarSkeletonBuilderParamConfig()
                // 开启广播日志
                .setBroadcastLog(true)
                // 异常码文档生成
                .addErrorCode(SpringGameCodeEnum.values())
                // 推送(广播)文档生成
                .scanActionSendPackage(SendDoc.class);
    }
    /**
     * 在实践项目中，可以提供这样一个通用的业务框架配置
     * @return BarSkeletonBuilder
     */
    public BarSkeletonBuilder createBarSkeletonBuilder(BarSkeletonBuilderParamConfig config) {
        // issues186，为了方便观察，全部写这里了
//        MethodParsers.me().setMethodParser(defaultMethodParser);
        // 设置数据编解码器 Proto
//        IoGameGlobalSetting.setDataCodec(new CommonProtoDataCodec());
         IoGameGlobalSetting.setDataCodec(new JsonDataCodec());
        // 业务框架构建器
        return config.createBuilder()
                // 添加控制台输出插件
                .addInOut(new DebugInOut())
                // 添加全链路调用日志跟踪插件
                .addInOut(new TraceIdInOut())
                // 设置一个自定义的 flow 上下文生产工厂
                .setFlowContextFactory(UserLoginFlowContext::new)
                ;
    }
}
